package com.hochschild.sgv.util;

import com.hochschild.sgv.domain.Solicitud;
import com.hochschild.sgv.domain.Usuario;


import com.hochschild.sgv.service.CatalogoManager;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.ResourceBundle;

public class EnviarCorreo {

    private String strMailFrom;
    private String strMailAlias;
    private String strMailRRHH;
    private EnviarEmail enviarMail = null;
    private CatalogoManager catalogoManager;

    public CatalogoManager getCatalogoManager() {
        return catalogoManager;
    }

    public void setCatalogoManager(CatalogoManager catalogoManager) {
        this.catalogoManager = catalogoManager;
    }

    public EnviarCorreo(String mailFrom, String mailAlias, String mailRRHH) throws Exception {
        strMailFrom = mailFrom;
        strMailAlias = mailAlias;
        strMailRRHH = mailRRHH;
        enviarMail = new EnviarEmail();
    }

    public String envioSolicitud(Usuario usuario, Usuario usuarioJefe, Solicitud solicitud) throws Exception {
        String asunto = "Sistema Gestión de Vacaciones - Notificación";
        
        SimpleDateFormat fechaServidor=new SimpleDateFormat("dd-MM-yyyy");
        Date d = new Date();
        
        System.out.println("Fecha servidor s" + fechaServidor.format(d));
        
        if (usuarioJefe.getNombreUsuario() == null) {
            usuarioJefe.setNombreUsuario("");
        }
        if (usuarioJefe.getApellidoUsuario() == null) {
            usuarioJefe.setApellidoUsuario("");
        }
        if (usuario.getNombreUsuario() == null) {
            usuario.setNombreUsuario("");
        }
        if (usuario.getApellidoUsuario() == null) {
            usuario.setApellidoUsuario("");
        }
        if (usuarioJefe.getCorreoUsuario() == null) {
            usuarioJefe.setCorreoUsuario("");
        }
        
        System.out.println("--- > correo "+ usuarioJefe.getCorreoUsuario());
        System.out.println("id documento " + solicitud.getIdSolicitud());
        
        InetAddress address = InetAddress.getLocalHost();
        String ip; ip = address.getHostAddress();
        
        String fechaString=fechaServidor.format(d);
        
        fechaString=fechaString.substring(0, 2) + fechaString.substring(3, 5) + fechaString.substring(6, 10);
        
        System.out.println("fecha cadena " + fechaString);
        
        ResourceBundle bundleSap = ResourceBundle.getBundle("aplicacion");
        String cantDias = bundleSap.getString("aplicacion.cantDia").trim();
        System.out.println("Cantidad de Dias  " + cantDias);
                    
        String portPc = bundleSap.getString("aplicacion.portPc").trim().compareTo("")==0?"":":" + bundleSap.getString("aplicacion.portPc").trim();
        System.out.println("port " + portPc);
        
        String ipMobil = bundleSap.getString("aplicacion.ipMobil").trim();
        System.out.println("ipmobil " + ipMobil);
        
        String portMobil = bundleSap.getString("aplicacion.portMobil").trim().compareTo("")==0?"":":" + bundleSap.getString("aplicacion.portMobil").trim() ;
        System.out.println("portMobil " + portMobil);
        
        String nombrePc = bundleSap.getString("aplicacion.nombrePc").trim();
        System.out.println("nombrepc " + nombrePc);
        
        String nombreMobil = bundleSap.getString("aplicacion.nombreMobil").trim();
        System.out.println("nombremobil " + nombreMobil);
        
//        System.out.println("port " + port);
//        System.out.println("ipmobil " + ipmobil);
//        System.out.println("nombrepc " + nombrepc);
//        System.out.println("nombremobil " + nombremobil);
        
        String strTexto = "Estimado(a)        " + usuarioJefe.getNombreUsuario().toUpperCase() + " " + usuarioJefe.getApellidoUsuario().toUpperCase() + " :" + "<br><br>";
        strTexto += "El colaborador " + usuario.getNombreUsuario().toUpperCase() + " " + usuario.getApellidoUsuario().toUpperCase() + " le ha enviado una solicitud de vacaciones del " + solicitud.getFechaInicioTexto() + " al " + solicitud.getFechaFinTexto() + " para su aprobación." + "<br>";
        strTexto += "<br>";
        strTexto += "Para atender la solicitud de vacaciones desde su computadora hacer click en:" + "<br>";
        strTexto +="<A HREF=" + "http://" + ip +  portPc + "/" + nombrePc + "/login.do?metodo=login&aprobar=" + fechaString + solicitud.getIdSolicitud() + ">Enlace-PC</A>";
        strTexto += "<br>" + "<br>";
        strTexto +="Para atender la solicitud de vacaciones desde su equipo móvil hacer click en:";
        strTexto += "<br>"  ;
        strTexto +="<A HREF=" + "http://" + ipMobil + portMobil + "/" + nombreMobil + "/serv/CargaBandejaSAP?aprobar=" +  fechaString + solicitud.getIdSolicitud() + ">Enlace-M&oacute;vil</A>";
        strTexto += "<br>";
        strTexto += "<br>";
        strTexto += "Saludos cordiales, ";
        strTexto += "<br>";
        strTexto += "Recursos Humanos.";        
        
        System.out.println("LinkPc: " + "http://" + ip +  portPc + "/" + nombrePc + "/login.do?metodo=login&aprobar=" + fechaString + solicitud.getIdSolicitud() + " Enlace-PC");
        System.out.println(" LinkMobil: " +     "http://" + ipMobil + portMobil + "/" + nombreMobil + "/serv/CargaBandejaSAP?aprobar=" +  fechaString + solicitud.getIdSolicitud());
        return enviarMail.EnviarEmail(strMailFrom, strMailAlias, usuarioJefe.getCorreoUsuario(), asunto, strTexto);

    }

    public String anulaSolicitudParaJefe(Usuario usuario, Usuario usuarioJefe, Solicitud solicitud, String tipo) throws Exception {
        if (usuarioJefe.getNombreUsuario() == null) {
            usuarioJefe.setNombreUsuario("");
        }
        if (usuarioJefe.getApellidoUsuario() == null) {
            usuarioJefe.setApellidoUsuario("");
        }
        if (usuario.getNombreUsuario() == null) {
            usuario.setNombreUsuario("");
        }
        if (usuario.getApellidoUsuario() == null) {
            usuario.setApellidoUsuario("");
        }
        if (usuarioJefe.getCorreoUsuario() == null) {
            usuarioJefe.setCorreoUsuario("");
        }

        
        String asunto = "Sistema Gestión de Vacaciones - Notificación";
        String strTexto = "";
        if (tipo.equals("S")) {
            strTexto = "Estimado(a)        " + usuarioJefe.getNombreUsuario().toUpperCase() + " " + usuarioJefe.getApellidoUsuario().toUpperCase() + " :"+"<br><br>";
            strTexto += "Su colaborador " + usuario.getNombreUsuario().toUpperCase() + " " + usuario.getApellidoUsuario().toUpperCase() + " ha anulado la solicitud de vacaciones programadas del " + solicitud.getFechaInicioTexto() + " al " + solicitud.getFechaFinTexto() + "<br>";
        } else if (tipo.equals("V")) {
            strTexto = "Estimado(a)        " + usuarioJefe.getNombreUsuario().toUpperCase() + " " + usuarioJefe.getApellidoUsuario().toUpperCase() + " :" + "<br><br>";
            strTexto += "Su colaborador " + usuario.getNombreUsuario().toUpperCase() + " " + usuario.getApellidoUsuario().toUpperCase() + " ha anulado las vacaciones solicitadas del " + solicitud.getFechaInicioTexto() + " al " + solicitud.getFechaFinTexto() + "<br>";
        } else {
            strTexto = "Estimado(a)      :  "+ "<br><br>";
            strTexto += "Se ha anulado las vacaciones del colaborador " + usuario.getNombreUsuario().toUpperCase() + " " + usuario.getApellidoUsuario().toUpperCase() + " solicitadas del " + solicitud.getFechaInicioTexto() + " al " + solicitud.getFechaFinTexto() + "<br>";
        }
        strTexto += "<br>";
        strTexto += "Saludos cordiales, ";
        strTexto += "<br>";
        strTexto += "Recursos Humanos.";
        if (tipo.equals("S") || tipo.equals("V")) {
            return enviarMail.EnviarEmail(strMailFrom, strMailAlias, usuarioJefe.getCorreoUsuario(), asunto, strTexto);
        } else {
            return enviarMail.EnviarEmail(strMailFrom, strMailAlias, strMailRRHH, asunto, strTexto);
        }
    }

    public String apruebaSolicitud(Usuario usuario, Solicitud solicitud) throws Exception {


        if (usuario.getNombreUsuario() == null) {
            usuario.setNombreUsuario("");
        }
        if (usuario.getApellidoUsuario() == null) {
            usuario.setApellidoUsuario("");
        }

        String asunto = "Sistema Gestión de Vacaciones - Notificación";
        String strTexto = "Estimado(a)      :  " + "<br><br>";
        strTexto += "Se ha registrado las vacaciones del colaborador " + usuario.getNombreUsuario().toUpperCase() + " " + usuario.getApellidoUsuario().toUpperCase() + " solicitadas del " + solicitud.getFechaInicioTexto() + " al " + solicitud.getFechaFinTexto() + "<br>";
        strTexto += "<br>";
        strTexto += "Saludos cordiales, ";
        strTexto += "<br>";
        strTexto += "Recursos Humanos.";
        return enviarMail.EnviarEmail(strMailFrom, strMailAlias, strMailRRHH, asunto, strTexto);
    }

    public String apruebaSolicitudParaColaborador(Usuario usuario, Solicitud solicitud) throws Exception {

        if (usuario.getNombreUsuario() == null) {
            usuario.setNombreUsuario("");
        }
        if (usuario.getApellidoUsuario() == null) {
            usuario.setApellidoUsuario("");
        }
        String asunto = "Sistema Gestión de Vacaciones - Notificación";
        String strTexto = "Estimado(a)        " + usuario.getNombreUsuario().toUpperCase() + " " + usuario.getApellidoUsuario().toUpperCase() + " :" +"<br><br>";
        strTexto += "Su solicitud de vacaciones para los d&iacute;as  " + solicitud.getFechaInicioTexto() + " a " + solicitud.getFechaFinTexto() + " fue aprobada." + "<br>";
        strTexto += "<br>";
        strTexto += "Saludos cordiales, ";
        strTexto += "<br>";
        strTexto += "Recursos Humanos.";
        return enviarMail.EnviarEmail(strMailFrom, strMailAlias, usuario.getCorreoUsuario(), asunto, strTexto);
    }

    public String rechazaSolicitudParaColaborador(Usuario usuario, Solicitud solicitud) throws Exception {

        if (usuario.getNombreUsuario() == null) {
            usuario.setNombreUsuario("");
        }
        if (usuario.getApellidoUsuario() == null) {
            usuario.setApellidoUsuario("");
        }
        String asunto = "Sistema Gestión de Vacaciones - Notificación";
        String strTexto = "Estimado(a)        " + usuario.getNombreUsuario().toUpperCase() + " " + usuario.getApellidoUsuario().toUpperCase() + " :" +"<br><br>";
        strTexto += "Su solicitud de vacaciones para los días  " + solicitud.getFechaInicioTexto() + " a " + solicitud.getFechaFinTexto() + " fue rechazada, por favor comunicarse con su jefe inmediato para mayor información." + "<br>";
        strTexto += "<br>";
        strTexto += "Motivo : " + solicitud.getMotivoSolicitud();
        strTexto += "<br>";
        strTexto += "<br>";
        strTexto += "Saludos cordiales, ";
        strTexto += "<br>";
        strTexto += "Recursos Humanos.";
        return enviarMail.EnviarEmail(strMailFrom, strMailAlias, usuario.getCorreoUsuario(), asunto, strTexto);
    }
    
    public String avisarColaboradorVacacionesPlanificadas(String FechaInicio , String FechaFin, String correoColaborador ) throws Exception{
        String asunto = "Sistema Gestión de Vacaciones - Notificación";
        StringBuilder srtTexto =  new StringBuilder();
        srtTexto.append("Estimado colaborador, <br><br>");
        srtTexto.append("Está próxima la fecha de inicio de sus vacaciones planificadas del ");
        srtTexto.append(FechaInicio);
        srtTexto.append(" al <br>");
        srtTexto.append(FechaFin);
        srtTexto.append(", no olvide realizar el trámite de solicitud en la oficina de Recursos Humanos.");
        srtTexto.append("<br><br>");
        srtTexto.append("Saludos cordiales, ");
        srtTexto.append("<br>");
        srtTexto.append("Recursos Humanos.");
        System.out.println("avisarColaboradorVacacionesPlanificadas: " + srtTexto);
        return  enviarMail.EnviarEmail(strMailFrom, strMailAlias, correoColaborador, asunto, srtTexto.toString());
    }
    
     public String avisarJefeVacacionesPlanificadas(String FechaInicio , String FechaFin, String correoJefe, String nombreColaborador, String apellidoColaborador, String area) throws Exception{
        String asunto = "Sistema Gestión de Vacaciones - Notificación";
        StringBuilder srtTexto =  new StringBuilder();
        srtTexto.append("Estimado colaborador, <br><br>");
        srtTexto.append("Está próxima la fecha de inicio de vacaciones planificadas de su colaborador ");
        srtTexto.append(nombreColaborador);
        srtTexto.append(" <br> ");
        srtTexto.append(apellidoColaborador); 
        srtTexto.append(" del área de ");
        srtTexto.append(area);
        srtTexto.append(" del ");
        srtTexto.append(FechaInicio);
        srtTexto.append(" al ");
        srtTexto.append(FechaFin);
        srtTexto.append(", no olvide");
        srtTexto.append("<br> gestionar su solicitud en la oficina de Recursos Humanos.");
        srtTexto.append("<br><br>");
        srtTexto.append("Saludos cordiales, ");
        srtTexto.append("<br>");
        srtTexto.append("Recursos Humanos.");
        System.out.println("avisarJefeVacacionesPlanificadas: " + srtTexto);
        return  enviarMail.EnviarEmail(strMailFrom, strMailAlias, correoJefe, asunto, srtTexto.toString());
    }
     
     public String avisarAnalistaVacacionesPlanificadas(String FechaInicio , String FechaFin, String correoAnalista, String nombreColaborador, String apellidoColaborador, String area) throws Exception{
        String asunto = "Sistema Gestión de Vacaciones - Notificación";
        StringBuilder srtTexto =  new StringBuilder();
        srtTexto.append("Estimado colaborador, <br><br>");
        srtTexto.append("Está próxima la fecha de inicio de vacaciones planificadas del ");
        srtTexto.append(FechaInicio);
        srtTexto.append(" al ");
        srtTexto.append(FechaFin);
        srtTexto.append("<br> para el colaborador ");
        srtTexto.append(nombreColaborador);
        srtTexto.append(" ");
        srtTexto.append(apellidoColaborador); 
        srtTexto.append(" del área de ");
        srtTexto.append(area);
        srtTexto.append(", no <br>");
        srtTexto.append("olvide realizar el seguimiento al trámite de solicitud.");
        srtTexto.append("<br><br>");
        srtTexto.append("Saludos cordiales, ");
        srtTexto.append("<br>");
        srtTexto.append("Recursos Humanos.");
        System.out.println("avisarAnalistaVacacionesPlanificadas: " + srtTexto);
        return  enviarMail.EnviarEmail(strMailFrom, strMailAlias, correoAnalista, asunto, srtTexto.toString());
    }
//     Notificaciones Dias Planificados
     
      public String notificacionColaboradorAJefe(Usuario usuario, Solicitud solicitud) throws Exception {
          
          return "";
      }
      
   //JEFE envia Vacaciones Planificadas
     public String avisarColaboradorJefe(String nombreColaborador, String correoColaborador ) throws Exception{
        String asunto = "Sistema Gestión de Vacaciones - Notificación";
        StringBuilder srtTexto =  new StringBuilder();
        srtTexto.append("Estimado(a), ");
        srtTexto.append(nombreColaborador);
        srtTexto.append(":<br><br>");
        srtTexto.append("Su solicitud de planificaci&oacute;n fue enviada al &aacute;rea de RRHH. ");
        srtTexto.append("<br><br>");
        srtTexto.append("Saludos cordiales, ");
        srtTexto.append("<br>");
        srtTexto.append("Recursos Humanos.");
        System.out.println("avisarColaboradorJefe: " + srtTexto);
        return  enviarMail.EnviarEmail(strMailFrom, strMailAlias, correoColaborador, asunto, srtTexto.toString());
    }
     
     public String avisarAnalistaJefe(String correoAnalista, String nombreColaborador, String apellidoColaborador) throws Exception{
        String asunto = "Sistema Gestión de Vacaciones - Notificación";
        StringBuilder srtTexto =  new StringBuilder();
        srtTexto.append("Estimado(a):  <br><br>");
        srtTexto.append("Se ha aprobado y remitido la planificaci&oacute;n de vacaciones del colaborador ");
        srtTexto.append(nombreColaborador);
        srtTexto.append(" <br>");
        srtTexto.append(apellidoColaborador);
        srtTexto.append(".");
        srtTexto.append("<br><br>");
        srtTexto.append("Saludos cordiales, ");
        srtTexto.append("<br>");
        srtTexto.append("Recursos Humanos.");
        System.out.println("avisarAnalistaJefe: " + srtTexto);
        return  enviarMail.EnviarEmail(strMailFrom, strMailAlias, correoAnalista, asunto, srtTexto.toString());
    }   
}
